From 8fa033460a535db457032484793451b974c1e26f Mon Sep 17 00:00:00 2001 From: "kaf24@firebug.cl.cam.ac.uk" Date: Thu, 27 Oct 2005 17:47:53 +0100 Subject: [PATCH] To allow kernel to handle radically different hypervisors in the future, I thought a magic field in the start_info might be useful. I just chose "Xen-.", but feel free to change it. Signed-off-by: Rusty Russell (authored) --- tools/libxc/xc_linux_build.c | 4 ++++ xen/arch/ia64/xen/domain.c | 2 ++ xen/arch/x86/domain_build.c | 2 ++ xen/include/public/xen.h | 1 + 4 files changed, 9 insertions(+) diff --git a/tools/libxc/xc_linux_build.c b/tools/libxc/xc_linux_build.c index 7a3a8737d9..cf4db7cb69 100644 --- a/tools/libxc/xc_linux_build.c +++ b/tools/libxc/xc_linux_build.c @@ -350,6 +350,8 @@ static int setup_guest(int xc_handle, start_info = xc_map_foreign_range( xc_handle, dom, PAGE_SIZE, PROT_READ|PROT_WRITE, page_array[0]); memset(start_info, 0, sizeof(*start_info)); + rc = xc_version(xc_handle, XENVER_version, NULL); + sprintf(start_info->magic, "Xen-%i.%i", rc >> 16, rc & (0xFFFF)); start_info->flags = flags; start_info->store_mfn = nr_pages - 2; start_info->store_evtchn = store_evtchn; @@ -624,6 +626,8 @@ static int setup_guest(int xc_handle, xc_handle, dom, PAGE_SIZE, PROT_READ|PROT_WRITE, page_array[(vstartinfo_start-dsi.v_start)>>PAGE_SHIFT]); memset(start_info, 0, sizeof(*start_info)); + rc = xc_version(xc_handle, XENVER_version, NULL); + sprintf(start_info->magic, "Xen-%i.%i", rc >> 16, rc & (0xFFFF)); start_info->nr_pages = nr_pages; start_info->shared_info = shared_info_frame << PAGE_SHIFT; start_info->flags = flags; diff --git a/xen/arch/ia64/xen/domain.c b/xen/arch/ia64/xen/domain.c index e77d1d1498..262608cc38 100644 --- a/xen/arch/ia64/xen/domain.c +++ b/xen/arch/ia64/xen/domain.c @@ -28,6 +28,7 @@ #include //#include #include +#include #include //#include @@ -930,6 +931,7 @@ int construct_dom0(struct domain *d, si = (start_info_t *)alloc_xenheap_page(); memset(si, 0, PAGE_SIZE); d->shared_info->arch.start_info_pfn = __pa(si) >> PAGE_SHIFT; + sprintf(si->magic, "Xen-%i.%i", XEN_VERSION, XEN_SUBVERSION); #if 0 si->nr_pages = d->tot_pages; diff --git a/xen/arch/x86/domain_build.c b/xen/arch/x86/domain_build.c index c702872206..7d995b157d 100644 --- a/xen/arch/x86/domain_build.c +++ b/xen/arch/x86/domain_build.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -602,6 +603,7 @@ int construct_dom0(struct domain *d, si->pt_base = vpt_start; si->nr_pt_frames = nr_pt_pages; si->mfn_list = vphysmap_start; + sprintf(si->magic, "Xen-%i.%i", XEN_VERSION, XEN_SUBVERSION); /* Write the phys->machine and machine->phys table entries. */ for ( pfn = 0; pfn < d->tot_pages; pfn++ ) diff --git a/xen/include/public/xen.h b/xen/include/public/xen.h index d21a41205d..3aba9e68ef 100644 --- a/xen/include/public/xen.h +++ b/xen/include/public/xen.h @@ -410,6 +410,7 @@ typedef struct shared_info { #define MAX_GUEST_CMDLINE 1024 typedef struct start_info { /* THE FOLLOWING ARE FILLED IN BOTH ON INITIAL BOOT AND ON RESUME. */ + char magic[32]; /* "Xen-.". */ unsigned long nr_pages; /* Total pages allocated to this domain. */ unsigned long shared_info; /* MACHINE address of shared info struct. */ uint32_t flags; /* SIF_xxx flags. */ -- 2.30.2